package com.ray.util;

import java.math.BigDecimal;

/**
 * 关于数字处理的工具类
* <p>Title: MathUtil</p>  
* <p>Description: </p>  
* @author 李斌  
* @date 2018年7月17日
 */
public class MathUtil {

	/**
	 * 银行取余法(四舍六入五成双)
	* @date 2018年7月17日 下午2:11:14 
	* @author 李斌
	* @return String 
	* @throws
	 */
	public static BigDecimal BankersRounding(double value, int digit){  
        double ratio = Math.pow(10, digit);  
        double _num = value * ratio;  
        double mod = _num % 1;  
        double integer = Math.floor(_num);  
        double returnNum;  
        if(mod > 0.5){  
            returnNum=(integer + 1) / ratio;  
        }else if(mod < 0.5){  
            returnNum=integer / ratio;  
        }else{  
            returnNum=(integer % 2 == 0 ? integer : integer + 1) / ratio;  
        }  
        BigDecimal bg = new BigDecimal(returnNum);   
        return  bg.setScale((int)digit, BigDecimal.ROUND_HALF_UP);   
	} 
	
	/**
	 * 设置double保留小数位，四舍六入无成双
	 * @param num 要转化的double
	 * @param digit 保留小数位
	 * @author 王荣
	 */
	public static double doubleFormat(double num,int digit) {
		return BankersRounding(num,digit).doubleValue();
	}
	
	/**
	 * 设置double保留小数位，直接去除多余的尾数，不进行四舍五入
	 * @param num
	 * @param digit
	 * @author 王荣
	 */
	public static double doubleFormatRoundDown(double num,int digit) {
		BigDecimal bigDecimal = new BigDecimal(num).setScale(digit, BigDecimal.ROUND_DOWN);
		return bigDecimal.doubleValue();
	}
	
}
